import { EMPTY_VALUE_LIST } from '@/variables/dataVariables'

/**
 * 判断 对象obj 是否为空对象
 * @param { Object } obj 传入的对象
 * @returns { Boolean } false -> 不为空; true -> 为空
 */
export function isEmptyObject(obj) {
  for (const key in obj) {
    return false
  }
  return true
}

/**
 * 判断是否为空数组
 * @param { Array } arr
 * @returns { Boolean } 空 -> true; 非空 -> false
 */
export function isEmptyArray(arr) {
  return !(arr.length > 0)
}

/**
 * 判断该值是否是 '', null, undefined, [], {}
 * @param {传入的value } value
 * @returns {Boolean } 空 -> true; 非空 -> false
 */
export function isEmptyValue(value) {
  const flag = EMPTY_VALUE_LIST.includes(value)
  if (flag) {
    return flag
  } else {
    if (value.constructor === Boolean) {
      return flag
    } else if (value.constructor === Number) {
      return flag
    } else {
      return value.constructor === Object ? isEmptyObject(value) : isEmptyArray(value)
    }
  }
}

/**
 * 把字符串转为数组
 * @param { 需要转换的字符串 } str
 */
export function str2array(str) {
  return str.replace(/(.)(?=[^$])/g, '$1,').split(',')
}

/**
 * 合并对象
 * @param { 默认对象 } defualtObj
 * @param { 插入对象 } insertObj
 * @returns { 新对象 } Object
 */
export function assignObject(defualtObj, insertObj) {
  return Object.assign(defualtObj, insertObj)
}

/**
 *
 * @param {*} obj
 * @param {*} obj2
 */
export function keysObject(obj, obj2) {
  Object.keys(obj).forEach(key => (obj2[key] = obj[key]))
}

/**
 *
 * @param { Array| Obj } obj
 * @returns { Array | Obj }
 */
export function deepCopy(obj) {
  var newobj = null
  obj !== null && (newobj = obj.constructor === Array ? [] : {})
  if (typeof obj !== 'object') {
    return
  }
  for (var i in obj) {
    newobj[i] = typeof obj[i] === 'object' ? deepCopy(obj[i]) : obj[i]
  }
  return newobj
}

export function debounce(fn, time) {
  const _arguments = arguments
  let timeout = null
  return function() {
    if (timeout) {
      clearTimeout(timeout)
    }
    timeout = setTimeout(() => {
      fn.call(this, _arguments)
    }, time)
  }
}
